TerminalApp: foreground target window in FocusProtocolPane#353
Merged
Conversation
focus_pane (Enter on a Live session in the session management view) could fail to surface the target window when that window already had the target pane focused. FocusProtocolPane only moved XAML focus *within* the window via _SetFocusedTab/FocusPane — which no-op when the pane is already focused — and relied on the focus transition as an accidental side effect to bring the OS window forward. Symptom: focusing session1 (in window1) from window2 worked only when window1's focus was on a different pane (e.g. the agent pane), but not when window1 was already focused on session1's own pane. Fix: raise SummonWindowRequested once the target pane is found, mirroring the desktop-notification activation path in TabManagement.cpp, so the window is reliably brought to the foreground regardless of its prior focus state. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR fixes cross-window focus_pane activation so that focusing a protocol pane in another window reliably brings the target OS window to the foreground even when that window already had the target pane focused (i.e., when intra-window XAML focus operations would otherwise no-op).
Changes:
- Raise
SummonWindowRequestedinsideTerminalPage::FocusProtocolPaneonce the target pane is located, ensuring OS-level window activation. - Preserve the existing tab/pane focusing logic (including the stashed agent-pane restore path) after summoning.
vanzue
approved these changes
Jun 24, 2026
vanzue
added a commit
that referenced
this pull request
Jul 3, 2026
Second review pass over the release checklist against the v0.1.2 release notes: - Added a [new] coverage marker to the legend and tagged all 12 genuinely-new v0.1.2 test cases with it (the two reworded existing cases — F5 refresh, ACP-sourced historical — are corrections, not new cases, so they stay untagged). - Added 5 more previously-missing cases surfaced by a closer read: - FRE execution-policy detection is correct / no false-block on probe timeout (#336/#338/#309) - wta-master death is a consistent degraded state requiring /restart, no split-brain (#329) - Session titles are clean (no bare '# AGENTS.md instructions' heading) (#355) - Focus brings the target window to the foreground (#353) - Agent-created terminals inherit the active pane profile (#366, closes #351) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
vanzue
added a commit
that referenced
this pull request
Jul 3, 2026
* docs(release-check-list): sync with v0.1.2 features Reviewed the release checklist against the v0.1.2 release notes and fixed two outdated statements plus added seven missing test cases for new features. Outdated statements corrected: - Session view refresh: now F5 on-demand re-scan (incl. WSL distros started after launch), not gated on hooks (#344). - Historical state: history is now sourced from ACP session/list, not on-disk file parsing (#365). Missing test cases added: - Alt+V clipboard image paste into agent chat (#354) - GitHub Enterprise Copilot sign-in (#362) - Bash/WSL shell integration incl. set -u safety (#340) - Shells self-report identity via OSC 9001;ShellType + nested-shell autofix targeting (#345) - Environment-aware answers/fixes: investigate PATH before answering/autofixing (#306) - WSL distro sessions visible and resumable in the correct distro (#323) - Agent panes not persisted into saved window layout (#360/#275) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(release-check-list): tag new v0.1.2 cases with [new] + add 5 more Second review pass over the release checklist against the v0.1.2 release notes: - Added a [new] coverage marker to the legend and tagged all 12 genuinely-new v0.1.2 test cases with it (the two reworded existing cases — F5 refresh, ACP-sourced historical — are corrections, not new cases, so they stay untagged). - Added 5 more previously-missing cases surfaced by a closer read: - FRE execution-policy detection is correct / no false-block on probe timeout (#336/#338/#309) - wta-master death is a consistent degraded state requiring /restart, no split-brain (#329) - Session titles are clean (no bare '# AGENTS.md instructions' heading) (#355) - Focus brings the target window to the foreground (#353) - Agent-created terminals inherit the active pane profile (#366, closes #351) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test(e2e): add master-death degraded-state integration test (#329); drop rolled-back WSL session checklist item Adds Feature.AgentMasterDeath.Tests.ps1: kills this app's wta-master out from under a live helper and asserts the full #329 contract end-to-end — the pane leaves Connected, the / popup is filtered to only /restart, NO master is silently respawned while degraded (anti-split-brain), and /restart brings up exactly one fresh master and reconnects. Verified passing live against the deployed dev package. Also removes the '[new] WSL distro sessions are visible and resumable' checklist item (#323) since WSL in-distro session support is being rolled back for v0.1.2, and drops the WSL example from the F5 refresh item to match. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address Copilot review: tighten master-count assertion and clarify Alt+V behavior - Feature.AgentMasterDeath.Tests.ps1: assert exactly one wta-master while connected (-Be 1, was -BeGreaterThan 0) so the connected-state gate itself catches a split-brain regression. Re-verified passing live. - release-check-list.md: correct the Alt+V item — Alt+V queues the image until the next prompt, and an unsupported agent / empty clipboard surfaces a clear system message rather than being a silent no-op. The [WSL-<distro>] raw-angle-bracket comment is already resolved: that checklist item was removed with the WSL session rollback. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address Copilot review round 2: block /stop in degraded popup test, release-agnostic [new] marker, spelling fix - Feature.AgentMasterDeath.Tests.ps1: add /stop to the blocked-slash-command list so a regression that offers /stop while transport-lost is caught (it's a real CommandKind::Stop). Re-verified passing live. - release-check-list.md: reword the [new] marker in release-agnostic terms and say when to clear it (was hard-coded to v0.1.2); fix forbidden spelling non-existent -> nonexistent (check-spelling CI). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Cross-window
focus_pane(Enter on a Live session in the session-management view) could fail to bring the target window to the foreground when that window already had the target pane focused.Repro
Root cause
TerminalPage::FocusProtocolPaneonly moved XAML focus within the target window via_SetFocusedTab/FocusPane. Those no-op when the pane is already focused, and the OS window previously only came forward as an accidental side effect of the focus actually transitioning. When the target pane was already focused, no transition happened → no activation → the window stayed in the background.Fix
Raise
SummonWindowRequestedonce the target pane is found, mirroring the desktop-notification activation path inTabManagement.cpp. The window is then reliably brought to the foreground regardless of its prior focus state.SummonWindow(toggleVisibility=false)→_globalActivateWindowperforms the activation; it is intra-process (the COM server runs insideWindowsTerminal.exe), so noAllowSetForegroundWindowis required.Test plan
0 Error(s);WindowsTerminal.exe+CascadiaPackagelink and pack cleanly.